# -*- coding=utf-8
# appid 已在配置中移除,请在参数 Bucket 中带上 appid。Bucket 由 BucketName-APPID 组成
# 1. 设置用户配置, 包括 secretId，secretKey 以及 Region
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client

import os

__all__ = {'TxCosManager'}


class TxCosManager(object):
    def __init__(self) -> None:
        self.TX_COS_BUCKET_NAME = os.environ.get('TX_COS_BUCKET_UPLOAD_NAME', '')
        secret_id = os.environ.get('TX_COS_SECRETID', '')  # 替换为用户的 secretId
        secret_key = os.environ.get('TX_COS_SECRETKEY', '')  # 替换为用户的 secretKey
        region = os.environ.get('TX_COS_REGION', '')  # 替换为用户的 Region
        token = None  # 使用临时密钥需要传入 Token，默认为空，可不填
        scheme = 'https'  # 指定使用 http/https 协议来访问 COS，默认为 https，可不填
        config = CosConfig(Region=region,
                           SecretId=secret_id,
                           SecretKey=secret_key,
                           Token=token,
                           Scheme=scheme)
        # 2. 获取客户端对象
        self.client = CosS3Client(config)

    def upload_file_from_filename(self, file_name, key_name=""):
        if key_name == "":
            key_name = file_name
        if self.client is None:
            return None
        self.client.upload_file(
            Bucket=self.TX_COS_BUCKET_NAME,
            LocalFilePath=file_name,  # 本地文件的路径
            Key=key_name,  # 上传到桶之后的文件名
            PartSize=3,  # 上传分成几部分
            MAXThread=10,  # 支持最多的线程数
            EnableMD5=False  # 是否支持MD5
        )
        url = self.client.get_presigned_download_url(
            Bucket=self.TX_COS_BUCKET_NAME, Key=key_name)
        return url

    def upload_file_from_buffer(self, file_chunk, key_name=""):
        self.client.upload_file_from_buffer(
            Bucket=self.TX_COS_BUCKET_NAME,
            Key=key_name,  # 上传到桶之后的文件名
            Body=file_chunk,
            PartSize=3,  # 上传分成几部分
            MAXThread=10,  # 支持最多的线程数
        )
        url = self.client.get_presigned_download_url(
            Bucket=self.TX_COS_BUCKET_NAME, Key=key_name)
        return url

    def download_file(self, key_name, dest_file_path):
        self.client.download_file(
            self.TX_COS_BUCKET_NAME, key_name, dest_file_path)

    def delete_files(self, file_list: list):
        delete_datas = []
        for file in file_list:
            delete_datas.append({"Key": file})
        objects = {
            "Quiet": "true",
            "Object": delete_datas
        }
        print(objects)
        self.client.delete_objects(self.TX_COS_BUCKET_NAME, objects)


if __name__ == "__main__":
    tx_cos_manager = TxCosManager()
    url = tx_cos_manager.upload_file_from_filename(
        "D:/single_suse.png", "okk/xx.png")
    print(url)
    tx_cos_manager.download_file("okk/xx.png", "D:/xxss.jpg")
    url = tx_cos_manager.upload_file_from_filename(
        "D:/single_suse.png", "obb/xx.png")
    # tx_cos_manager.delete_files(["okk/xx.jpg"])
